// #include <stdio.h>
// #include <stdlib.h>
// #include <Windows.h>
// #include <stdbool.h>
//
// #define MAXSIZE 10
// typedef int ElemType;
// //队列结构
// typedef struct QueueSq {
//     ElemType data[MAXSIZE];
//     int front;
//     int rear;
// }QueueSq;
//
// //栈结构
// typedef struct SNode {
//     ElemType data;
//     struct SNode* next;
// }SNode;
//
// //栈顶指针
// typedef struct  Stack {
//     SNode* top;
// }Stack;
//
// //初始化栈
// void InitStack(Stack* S) {
//     S->top=NULL;
// }
//
// //判断栈空
// bool IsStackNull(Stack* S) {
//    return S->top==NULL;
// }
//
// //入栈
// void PushStack(Stack* S,ElemType value) {
//     if(S==NULL) {
//         return;
//     }
//     SNode* newNode=(SNode*)malloc(sizeof(SNode));
//     if(newNode==NULL) {
//         printf("内存分配失败\n");
//         return;
//     }
//     newNode->data=value;
//     newNode->next=S->top;
//     S->top=newNode;
// }
//
// //出栈
// ElemType PopStack(Stack* S) {
//     if(S->top==NULL) {
//         return -1;
//     }
//     SNode* tmp=S->top;
//     S->top=S->top->next;
//     return tmp->data;
// }
//
// //初始化
// void InitCQueue(QueueSq* Q) {
//     Q->front=Q->rear=0;
// }
//
// //判断队列空
// bool isNull(QueueSq* Q) {
//     return Q->front==Q->rear;
// }
//
// //判断队列为满
// bool isFull(QueueSq* Q) {
//     return Q->front==(Q->rear+1)%MAXSIZE;
// }
//
// //入队
// void PushQ(QueueSq* Q,ElemType value) {
//     if(isFull(Q)) {
//         printf("队列已满,无法入队\n");
//         return;
//     }
//     Q->data[Q->rear]=value;
//     Q->rear=(Q->rear+1)%MAXSIZE;
// }
//
// //出队
// void PopQ(QueueSq* Q,ElemType* value) {
//     if(isNull(Q)) {
//         printf("队列为空,不可出队\n");
//         return;
//     }
//     *value=Q->data[Q->front];
//     Q->front=(Q->front+1)%MAXSIZE;
// }
//
// //打印队列元素
// void PrintQ(QueueSq* Q) {
//     if (isNull(Q)) {
//         printf("队列为空\n");
//         return;
//     }
//
//     printf("队列元素: ");
//     int i = Q->front;
//
//     do {
//         printf("%d ", Q->data[i]);
//         i = (i + 1) % MAXSIZE;
//     } while (i != Q->rear);
//
//     printf("\n");
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     //元素入队
//     QueueSq Q;
//     InitCQueue(&Q);
//     PushQ(&Q,1);
//     PushQ(&Q,2);
//     PushQ(&Q,3);
//     PushQ(&Q,4);
//     PushQ(&Q,5);
//     PrintQ(&Q);
//     //声明栈并初始化
//     Stack S;
//     InitStack(&S);
//     //通过栈逆置元素
//     while (!isNull(&Q)) {
//         //元素出队
//         int value;
//         PopQ(&Q,&value);
//         //再将出队的元素入栈
//         PushStack(&S,value);
//     }
//     //元素依次出栈打印(逆置)
//     printf("逆置结果:");
//     while (!IsStackNull(&S)) {
//         int result=PopStack(&S);
//         printf("%d ",result);
//     }
//     printf("\n");
//     return 0;
// }